package jheej5024;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J01_helloJDBC {

	//JDBC
	//데이터베이스에 접근하고 조작하는 것은
	//아주 중요한 주제중의 하나임
	//데이터베이스에는 여러 브랜드가 있음
	//Oracle, MySQL, MSSQL 등등
	//모든 데이터베이스 서버는 독점적인 방식을 통해 접근하고 관리하도록 허용됨
	//따라서, 각각의 데이터베이스에 접근하려면 각 브랜드가 제공하는 기술만을 사용해야 함
	
	//운좋게도 자바에서는 서로 다른 데이터베이스에 통일된 방식으로 접근하게 하는 JDBC를 제공함
	//Java 7은 JDBC 4.1을 제공
	//JDBC Core API : java.sql 패키지
	//JDBC Optional API : javax.sql 패키지
	
	//JDBC Driver
	//데이터베이스 제조사가 제공하는 라이브러리
	//각 제조사는 자신만의 독점적인 기술을 이 드라이브러리에 포함 시켜둠
	//이것을 JDBC API라는 통일돈 코드를 이용해서 데이터베이스를 제어할 수 있음
	
	// 데이터베이스 접근5단계
	//1.데이터베이스에 접근하기 위해 'JDBC드라이버' 불러오기
	//2.데이터베이스 '연결' 얻기
	//3.실행할 'SQL 문장'을 만들기 위해 Statement/PreparedStatement 객체 생성
	//4.SQL문장을 실행하고 데이터베이스로부터 넘어온 '결과를 처리'하기 위해 ResultSet객체를 생성
	//5.모든 처리가 끝나면 JDBC 자원 '해제'
	
	//Oracle JDBC 드라이버 등록
	//ojdbc6.jar를 라이브러리로 등록
	//Build Path ->add external archives
	
	public static void main(String[] args) {
		//오라클 데이터베이스 연결정보
		final String DRV = "oracle.jdbc.driver.OracleDriver"; 
		final String URL = "jdbc:oracle:thin:@112.216.253.125:1521:xe"; 
		final String USR = "jheej5024"; 
		final String PWD = "jheej5024"; 

		//MySQL 데이터베이스 연결정보
		//DRV = "com.mysql.jdbc.Driver"
		//URL = "jdbc:mysql://112.216.253.125:3306/zipcode"
	    //USR = "zipcode"
		//PWD = "zipcode"
		
		//데이터베이스 작업용 객체 정의
		Connection conn = null;          //연결
	    PreparedStatement pstmt = null;  //질의
	    ResultSet rs = null;             //결과
		String SQL = "select * from employees";
	    
		//JDBC 관련코드 작성시 예외처리를 위해
		//try - catch - finally를 작성해둘 것!
		try {
			//1.JDBC 드라이버 불러오기
			//Class : 클래스에 대한 객체를 동적으로 생성
			Class.forName( DRV );
			//2.데이터베이스 연결
			conn = DriverManager.getConnection(URL, USR, PWD);
			//3.실행할 SQL 질의 작성
			pstmt =conn.prepareStatement(SQL);
			//4a.SQL 질의를 실행하고 결과를 받음
			rs = pstmt.executeQuery();
			//4b.받은 결과 처리
			if(rs.next()){     //결과에 데이터가 존재하면
				do{            //계속 반복해서 그것을 처리
					//rs.getXxx():ResultSet 객체에서 데이터를 가져옴
					System.out.println(rs.getString("employee_id"));
					System.out.println("/"); 
					System.out.println(rs.getString(4)); //email
				} while (rs.next());
				
			} else {           //결과에 데이터가 없으면
				System.out.println("데이터가 없어영~");
			}
			
			
		} catch(Exception ex) {
			ex.printStackTrace();
		} finally {
			//5.JDBC 객체 해제
			if(rs!= null)try{rs.close(); rs = null;}catch(Exception e){}
			if(pstmt!= null)try{pstmt.close(); pstmt = null;}catch(Exception e){}
			if(conn!= null)try{conn.close(); conn = null;}catch(Exception e){}
			
		}
		
		
		
	}

}
